Futures are objects that represent the eventual completion or failure of an asynchronous operation. They provide a way to handle asynchronous
operations in a more organized and manageable manner. To use await, you need to ensure that you are calling a function or an expression
that returns a future.
The reason await should only be used on a future is that it expects the operand to be a future object. When you use
await, it waits for the future to be resolved or rejected and then returns the resolved value or throws the rejection reason,
respectively. If the operand of await is not a future, awaiting it is redundant and might not have been the developer’s intent.
If you try to use await on a non-future value, such as a regular object or a primitive type, it will not pause the execution of the
function because there is no asynchronous behavior involved. Instead, await will convert the value to a resolved future, and will wait
for it to complete.
var x = 42;
await x; // Noncompliant: x is a number, not a promise
var x = functionReturningFuture();
await x;